package com.example.chamberlainserver.mapper;

import com.example.chamberlainserver.Entry.CounselorClass;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 辅导员班级关联数据访问层
 */
@Mapper
public interface CounselorClassMapper {
    
    /**
     * 查询所有关联关系
     */
    List<CounselorClass> selectAll();
    
    /**
     * 根据ID查询关联关系
     */
    CounselorClass selectById(@Param("id") Integer id);
    
    /**
     * 根据辅导员ID查询关联关系
     */
    List<CounselorClass> selectByCounselorId(@Param("counselorId") Integer counselorId);
    
    /**
     * 根据班级ID查询关联关系
     */
    List<CounselorClass> selectByClassId(@Param("classId") Integer classId);
    
    /**
     * 查询特定辅导员和班级的关联关系
     */
    CounselorClass selectByCounselorAndClass(@Param("counselorId") Integer counselorId, 
                                            @Param("classId") Integer classId);
    
    /**
     * 分页查询关联关系（带详细信息）
     */
    List<CounselorClass> selectByPageWithDetails(@Param("offset") Integer offset, 
                                               @Param("limit") Integer limit,
                                               @Param("counselorName") String counselorName,
                                               @Param("className") String className,
                                               @Param("department") String department);
    
    /**
     * 查询关联关系总数
     */
    Integer countAll(@Param("counselorName") String counselorName,
                    @Param("className") String className,
                    @Param("department") String department);
    
    /**
     * 插入关联关系
     */
    Integer insert(CounselorClass counselorClass);
    
    /**
     * 批量插入关联关系
     */
    Integer batchInsert(@Param("list") List<CounselorClass> counselorClasses);
    
    /**
     * 更新关联关系
     */
    Integer update(CounselorClass counselorClass);
    
    /**
     * 删除关联关系
     */
    Integer deleteById(@Param("id") Integer id);
    
    /**
     * 根据辅导员ID删除关联关系
     */
    Integer deleteByCounselorId(@Param("counselorId") Integer counselorId);
    
    /**
     * 根据班级ID删除关联关系
     */
    Integer deleteByClassId(@Param("classId") Integer classId);
    
    /**
     * 删除特定辅导员和班级的关联关系
     */
    Integer deleteByCounselorAndClass(@Param("counselorId") Integer counselorId, 
                                     @Param("classId") Integer classId);
    
    /**
     * 批量删除关联关系
     */
    Integer deleteByIds(@Param("ids") List<Integer> ids);
    
    /**
     * 更新主要负责辅导员
     */
    Integer updatePrimaryCounselor(@Param("classId") Integer classId, 
                                  @Param("counselorId") Integer counselorId);
    
    /**
     * 取消班级的主要负责辅导员
     */
    Integer clearPrimaryCounselor(@Param("classId") Integer classId);
}